home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 003 / dbapg.arc / INKEY.ASM < prev    next >
Encoding:
Assembly Source File  |  1984-08-05  |  2.1 KB  |  79 lines

  1. ; Subroutine.: INKEY.ASM
  2. ; Author.....: Dave Green
  3. ; Date.......: 10/27/83, 11/3/83.
  4. ; Notice.....: Copyright 1983, Dave Green, All Rights Reserved
  5. ; Notes......: INKEY function for use in dBASE II.
  6. ;
  7. ;
  8.     ORG    0A400H        ; DEFINE LOAD ADDRESS
  9. ;
  10. ; SETUP SECTION.
  11. ; MUST RUN THIS SECTION BEFORE THE OTHER SECTIONS CAN BE USED.
  12. ;
  13. SETUP:    LHLD    0006H        ; GET DOS ENTRY POINT ADDRESS
  14.     SHLD    ENTRY+1        ; MOVE IT TO JUMP INSTRUCTION 
  15.                 ; IN CODE
  16.     LXI    H,CMDTEST    ; GET COMMAND TEST ADDRESS
  17.     SHLD    0006H        ; REPLACE NORMAL DOS ENTRY POINT
  18.     RET
  19. ;
  20. ; RESTORE SECTION.
  21. ; MUST RUN THIS SECTION TO RESTORE THE NORMAL INPUT
  22. ; KEYBOARD INPUT FOR dBASE II.
  23. ;
  24. RESTORE:
  25.     LHLD    ENTRY+1        ; GET ORIGINAL DOS ENTRY POINT
  26.     SHLD    0006H        ; PUT IT BACK
  27.     RET
  28. ;
  29. ; THE NORMAL CALL 0005H IS DIVERTED TO THIS ROUTINE,
  30. ; WHICH INTERCEPTS DIRECT CONSOLE I/O COMMANDS.
  31. ; OTHER DOS COMMANDS ARE UNAFFECTED.
  32. ;
  33. CMDTEST:    
  34.     PUSH    PSW        ; SAVE STATE
  35.     MOV    A,C        ; MOVE COMMAND TO REGISTER A
  36.     CPI    03H        ; RAW CONSOLE INPUT COMMAND
  37.                 ; ISSUED?
  38.     JZ    INTERCEPT    ; YES, INTERCEPT IT
  39.     CPI    06H        ; DIRECT CONSOLE I/O COMMAND
  40.                 ; ISSUED?
  41.     JNZ    DOS        ; NO, PASS COMMAND TO DOS
  42.     MOV    A,E
  43.     CPI    0FFH        ; INPUT/STATUS REQUEST?
  44.     JZ    INTERCEPT    ; YES, INTERCEPT IT
  45.     CPI    0FEH        ; STATUS REQUEST?
  46.     JZ    INTERCEPT    ; YES, INTERCEPT IT
  47.     CPI    0FDH        ; INPUT REQUEST?
  48.     JZ    INTERCEPT    ; YES, INTERCEPT IT
  49.     JMP    DOS        ; COMMAND IS OUTPUT, 
  50.                 ; PASS IT TO DOS
  51. ;
  52. INTERCEPT:
  53.     MVI    C,0H    ; COMMAND IS CONSOLE INPUT, SO RETURN 
  54.             ; BINARY 0.  IN OTHER WORDS, FOOL dBASE
  55.             ; INTO BELIEVING THERE IS NOTHING IN THE
  56.             ; BUFFER TO READ.
  57.     POP    PSW
  58.     RET
  59. ;
  60. DOS:    POP    PSW    ; COMMAND IS NOT CONSOLE INPUT, PASS IT 
  61.             ; TO DOS
  62. ENTRY:    JMP    0000H    ; ADDRESS OF JUMP SET BY SETUP ROUTINE
  63. ;
  64. ;
  65. ; INKEY SECTION.
  66. ; THIS IS THE ROUTINE dBASE WILL ACTUALLY USE TO GET A CHARACTER.
  67. ;
  68. INKEY:    PUSH    H        ; SAVE ADDRESS OF STRING PARAMETER
  69.     MVI    C,06H        ; SETUP DIRECT CONSOLE I/O COMMAND
  70.     MVI    E,0FFH
  71.     CALL    ENTRY        ; CALL DOS ENTRY POINT DIRECTLY, 
  72.                 ; BY-PASSING 05H
  73.     POP     H        ; GET ADDRESS OF STRING PARAMETER
  74.     INX    H        ; POINT TO FIRST CHAR OF STRING
  75.     MOV    M,A        ; MOVE CHAR (0 IF NO CHAR) 
  76.                 ; TO STRING PARAMETER
  77.     RET
  78.     END
  79.